package com.xjh.basestudy.designmode.behaviorMode.behaviorMode5_Status.p2_status;

/**
 * @Author XuJianHua
 * @Date 2022/10/4 16:46
 * @Description
 * 这个交通灯状态切换逻辑看起来非常复杂，满当当地摆放在类里面，维护起来也非常让人头疼。这只是十字路口的一处交通灯而已，若是东西南北各处交通灯全部联动起来的话，其复杂程度难以想象。
 * 要解决这个问题，我们就得基于状态模式，将这个庞大的类进行拆分，用一种更为优雅的方式将这些切换逻辑组织起来，让状态的切换及维护变得轻松自如。沿着这个思路，我们把状态相关模块从交通灯里抽离出来
 */
public class TrafficLight_Orgin {

    //交通灯有红灯（禁行）、黄灯（警示）、绿灯（通行）3种状态
    String state = "红";//初始状态为红灯

    //切换为绿灯（通行）状态
    public void switchToGreen() {
        if ("绿".equals(state)) {//若当前是绿灯状态
            System.out.println("ERROR!!!已是绿灯状态无须再切换");
        }
        else if ("红".equals(state)) {//若当前是红灯状态
            System.out.println("ERROR!!!红灯不能切换为绿灯");
        }
        else if ("黄".equals(state)) {//若当前是黄灯状态
            state = "绿";
            System.out.println("OK...绿灯亮起60秒");
        }
    }

    //切换为黄灯（警示）状态
    public void switchToYellow() {
        if ("黄".equals(state)) {//若当前是黄灯状态
            System.out.println("ERROR!!!已是黄灯状态无须再切换");
        }
        else if ("红".equals(state) || "绿".equals(state)) {//若当前是红灯或者是绿灯状态
            state = "黄";
            System.out.println("OK...黄灯亮起5秒");
        }
    }

    //切换为红灯（禁行）状态
    public void switchToRed() {
        if ("红".equals(state)) {//若当前是红灯状态
            System.out.println("ERROR!!!已是红灯状态无须再切换");
        }
        else if ("绿".equals(state)) {//若当前是绿灯状态
            System.out.println("ERROR!!!绿灯不能切换为红灯");
        }
        else if ("黄".equals(state)) {//若当前是黄灯状态
            state = "红";
            System.out.println("OK...红灯亮起60秒");
        }
    }

}
